package com.vivz.guess.what;

import android.content.Context;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.RingtonePreference;
import android.text.TextUtils;

public class SummaryToValuePreferenceChangeListener implements Preference.OnPreferenceChangeListener {

	public boolean onPreferenceChange(final Preference preference, final Object value) {
		final String stringValue = value.toString();

		if (preference instanceof ListPreference) {
			// For list preferences, look up the correct display value in the preference's 'entries' list.
			final ListPreference listPreference = (ListPreference) preference;
			final int index = listPreference.findIndexOfValue(stringValue);

			// Set the summary to reflect the new value.
			preference.setSummary(index >= 0 ? listPreference.getEntries()[index] : null);

		} else if (preference instanceof RingtonePreference) {
			// For ringtone preferences, look up the correct display value using RingtoneManager.
			if (TextUtils.isEmpty(stringValue)) {
				// Empty values correspond to 'silent' (no ringtone).
				preference.setSummary(R.string.pref_ringtone_silent);

			} else {
				final Context context = preference.getContext();
				final Ringtone ringtone = RingtoneManager.getRingtone(context, Uri.parse(stringValue));

				if (ringtone == null) {
					// Clear the summary if there was a lookup error.
					preference.setSummary(null);
				} else {
					// Set the summary to reflect the new ringtone display name.
					final String name = ringtone.getTitle(context);
					preference.setSummary(name);
				}
			}

		} else {
			// For all other preferences, set the summary to the value's simple string representation.
			preference.setSummary(stringValue);
		}
		return true;
	}

}
